{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "d0c348a3",
   "metadata": {},
   "source": [
    "# 7-2，广告算法业务"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d62b26dc",
   "metadata": {},
   "source": [
    "## 一，两种广告\n",
    "\n",
    "广告按其投放目的可以分成两类：效果广告 和 品牌广告。\n",
    "\n",
    "效果广告是为了直接提升某个产品的用户数量或者销售收入。\n",
    "\n",
    "而品牌广告则是为了通过提升品牌知名度美誉度从而间接带来该品牌产品用户和销售收入的增长。\n",
    "\n",
    "大家所熟悉的互联网广告大部分都是效果广告。\n",
    "\n",
    "如：微信的朋友圈广告、百度搜索的竞价排名广告、天猫淘宝的推荐商品广告、QQ/网易云音乐启动时的开屏广告、腾讯/爱奇艺视频中的贴片广告等等。\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "862437ff",
   "metadata": {},
   "source": [
    "## 二，转化漏斗\n",
    "\n",
    "\n",
    "广告行业有一句名言：我知道我的广告费有一半是浪费的，遗憾的是，我不知道浪费的是哪一半。\n",
    "\n",
    "互联网场景下的效果广告通常存在着一个非常大的转化漏斗：曝光 ——> 点击 ——> 转化。\n",
    "\n",
    "例如某款游戏APP在微信朋友圈的广告被曝光给了1000个用户，然后有100个人点击了，最后这点击的100个人当中只有5个人最终下载了这个游戏APP。\n",
    "\n",
    "那么，这个游戏公司作为广告主应该给微信这个流量主付多少广告费呢？ 是按照1000个曝光计费，还是100个点击计费，还是5个转化计费呢？\n",
    "\n",
    "这取决于广告的计费模式。\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ed64be78",
   "metadata": {},
   "source": [
    "## 三，计费模式\n",
    "\n",
    "互联网广告主要的计费模式 包括 以下一些：\n",
    "\n",
    "* CPM(Cost Per Mile, 按千次展示计费)\n",
    "\n",
    "* CPC(Cost Per Click, 按用户点击计费)\n",
    "\n",
    "* CPA(Cost Per Action, 按转化计费)\n",
    "\n",
    "* oCPM(Optimized Cost Per Mile, 智能报价策略优化的按千次展示计费) \n",
    "\n",
    "* oCPC(Optimized Cost Per Click, 智能报价策略优化的按用户点击计费) \n",
    "\n",
    "* oCPA(Optimized Cost Per Action, 智能报价策略优化的按转化计费) \n",
    "\n",
    "\n",
    "这些计费模式可以分成CPx和oCPx两类，这两类实际上计费方式是一样的，主要差别在于报价方式不同。\n",
    "\n",
    "例如CPC和oCPC都是按照点击量乘以点击单价进行结算。主要区别在于CPC的点击单价报价是需要广告主自己根据自己的成本预算和收益预估进行调整的，但是oCPC的点击单价报价是由广告平台系统根据广告主设计的优化目标(一般是平均转化成本)在一定价格范围内进行智能报价的，对预估转化率高的流量提高报价，而对预估转化率低的流量降低报价，从而达到降低平均转化成本的目的。实践中oCPC广告一般要先按照CPC广告的方式投放一段时间积累一定转化数据，有足够多的转化数据后才能够进行第二阶段的oCPC智能报价。\n",
    "\n",
    "为什么会有这么多不同的计费模式呢，想象如下对话场景。\n",
    "\n",
    "流量主(微信)说：我们微信就那么十几亿用户，每天朋友圈能够进行展现的广告量就那么几百亿，给你们曝光了就不能给别人曝光，曝光量反应我们的成本，当然应该按照曝光量(CPM)计费。\n",
    "\n",
    "广告主(游戏公司)说：你们绝大部分曝光都没有转化啊，没有转化对我来说等于0啊，我还给你广告费，这不是白嫖吗？按转化量(CPA)计费吧！\n",
    "\n",
    "流量主(微信)说：我们给了你们那么多流量曝光，是你们这个游戏做的太辣鸡了，用户都不感兴趣，怪我咯？\n",
    "\n",
    "广告主(游戏公司)说：你看看你们都把我们的游戏推给了一些什么用户啊，我们这是一款格斗类游戏，你们怎么还推给那么多的中老年大爷大妈，要多给小学生推啊！\n",
    "\n",
    "流量主(微信)说：那我们折衷一下，按点击量计费(CPC)吧，用户既然都点击了，说明我们给你找的这个用户是精准的，用户最后有没有下载这个游戏就不是我们能够控制的了啊，广告文案是你们写的，游戏也是你们做的，你们自己去优化呀。这样OK吧？\n",
    "\n",
    "广告主(游戏公司)说：那你们一个点击量收多少钱啊？\n",
    "\n",
    "流量主(微信)说：你们可以自主报价，系统会拿你们的报价和其他广告主的报价进行竞价比较，最终平台预估收益最高的广告报价获得流量展示机会。\n",
    "\n",
    "广告主(游戏公司)说：那是不是CPC报价最高就一定能拿到流量呢？\n",
    "\n",
    "流量主(微信)说：也不一定，因为我们是按照点击量收费的，如果用户不点击的话我们不收钱，所以点击率和CPC报价的乘积才是我们平台的预估收益。如果你们的游戏和广告文案做得更好一些，点击率就更高一些，你们的CPC报价低一些也能够拿到流量，从而节约广告成本。\n",
    "\n",
    "广告主(游戏公司)说：得了您，我们走一个试试。\n",
    "\n",
    "(一个月后...)\n",
    "\n",
    "广告主(游戏公司)说：我们上个月试了一下你们这个CPC报价，不是很好弄啊，调低了吧竞价阶段都拿不到流量，调高了吧感觉又很浪费钱，虽然现在也买了不少点击量了，但是转化率不高呢，你们那边有什么解决方案吗？\n",
    "\n",
    "流量主(微信)说：你们可以试试我们的智能报价策略优化的按用户点击计费(oCPC)方式。你们设定能够接受的转化报价(CPA)范围，我们的智能系统会根据流量和你们广告的匹配程度进行智能报价，如果预估转化率高的，我们会相应调高报价，如果预估转化率低的，系统会降低报价，这样能够降低你们的平均转化成本，并且不用你们反复调价。\n",
    "\n",
    "广告主(游戏公司)说：盖了帽儿了我的老baby。\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "602474d2",
   "metadata": {},
   "source": [
    "## 四， eCPM 排序\n",
    "\n",
    "\n",
    "现在的互联网广告平台很多时候都会给广告主非常灵活的广告投放计费策略供他们选择。\n",
    "\n",
    "广告主可以选择CPC计费方式，为用户的点击付费，也可以选择CPA计费方式，为用户最终的转化行为付费。\n",
    "\n",
    "如果投放的是品牌广告，只关注曝光量，也可以选择CPM计费方式，以确定的价格直接购买曝光量。\n",
    "\n",
    "当然，广告主还可以选择更加智能的报价方式如oCPC,oCPM,oCPA，\n",
    "\n",
    "那么，这么多的广告，计费策略还不相同，广告平台如何确定在特定场景下应该展现哪条广告才能获得最大收益呢？\n",
    "\n",
    "答案是预估每种广告展现后的收益(eCPM：estimated Cost Per Mile)，排序后选择其中最高的进行展现。\n",
    "\n",
    "假设微信朋友圈后台的待展现广告列表里有3条广告。\n",
    "\n",
    "第一条广告A是一条CPM广告，广告主报价是1元，也就是每曝光1000次给支付1元。\n",
    "\n",
    "第二条广告B是一条CPC广告，广告主报价是2元，也就是用户每点击1次给广告平台支付2元。\n",
    "\n",
    "第三条广告C是一条CPA广告，广告主报价是10元，也就是每成功转化一个用户给广告平台支付10元。\n",
    "\n",
    "第四条广告D是一条oCPC广告，智能调价系统的出价是3元，也就是用户每点击1次给广告平台支付3元。\n",
    "\n",
    "现在有个家伙来刷朋友圈了，微信打算给他送个惊喜，曝光1条广告给他，恰点钱。\n",
    "\n",
    "到底该曝光哪条广告给他才能获得最高的收益呢？\n",
    "\n",
    "对于广告A，其千次展现预估收益eCPM的计算非常简单。\n",
    "\n",
    "eCPM(A) = CPM(A) = 1 元\n",
    "\n",
    "对于广告B，它的eCPM还取决于这个场景下用户对这条广告进行点击的概率 CTR(Click Through Rate)，假定这个概率是0.01.\n",
    "\n",
    "eCPM(B) = 1000 *  CTR(B) * CPC(B) = 1000 * 0.01 * 2 = 20 元\n",
    "\n",
    "对于广告C，它的eCPM不仅取决于用户进行点击的概率CTR，还取决于用户点击后进行进一步下载APP或者购买商品等转化行为的概率CVR(Convention Rate)，假定广告C预估被用户点击的概率是0.05，点击后转化的概率是0.1.\n",
    "\n",
    "eCPM(C) = 1000 *  CTR(C) * CVR(C) * CPA(C) = 1000 * 0.05 * 0.1 * 10 = 50 元\n",
    "\n",
    "对于广告D，它的eCPM计算方式和CPC广告的计算方式是一样的，假定CTR概率是0.02.\n",
    "\n",
    "eCPM(D) = 1000 *  CTR(D) * oCPC(D) = 1000 * 0.02 * 2 = 40 元\n",
    "\n",
    "很显然，在这个场景下，这个广告位给广告C能够获得更好的预期收益，这个预期收益是 50/1000 = 0.05元。\n",
    "\n",
    "最后的成交价一般会取第二高报价的基础上加0.1元，所以，假设这条广告最后发生了转化，广告主C应当支付 40.1/5=8.02元。\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e38a1206",
   "metadata": {
    "lines_to_next_cell": 0
   },
   "source": [
    "## 五， CTR和CVR预估\n",
    "\n",
    "从eCPM的计算公式中可以看到，对于CPC广告，计算它的关键是准确地估计点击率CTR。\n",
    "\n",
    "而对于CPA广告，要计算eCPM，不仅需要准确地估计点击率CTR，还需要准确地估计转化率CVR。\n",
    "\n",
    "可以说，CTR和CVR估计得准不准，直接决定了广告流量分发的效率，从而决定了广告平台的最终收益。\n",
    "\n",
    "\n",
    "从算法角度来看，CTR预估和CVR预估可以转换成一个二分类问题(点击还是没点击，转化还是没有转化)。\n",
    "\n",
    "通常，CTR预估使用的模型结构基本上和推荐系统中的精排阶段是一样的，主要是要做好user和item的特征交叉，做好行为特征建模。\n",
    "\n",
    "但广告的CTR/CVR预估和推荐系统的精排有一点细微的差别，推荐系统的精排业务上只关心这个排序的相对值，但是广告系统的CTR/CVR预估是关心这预估概率的绝对值的。\n",
    "\n",
    "因为推荐系统只要把用户更加喜欢的排在前面就行了，至于内容A和内容B用户的喜欢程度相差多少，那个是不重要的。\n",
    "\n",
    "而广告系统有不同的广告，CPC广告要和CPM广告竞价，必须要知道CPC广告点击率CTR的绝对值才可以比较。\n",
    "\n",
    "所以，做CTR/CVR算法模型，如果对样本做了重采样，会导致CTR预估概率偏离真实值，需要根据采样比例重新校正。\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1c807bb7",
   "metadata": {},
   "source": [
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c1df8276",
   "metadata": {},
   "source": [
    "**如果本书对你有所帮助，想鼓励一下作者，记得给本项目加一颗星星star⭐️，并分享给你的朋友们喔😊!** \n",
    "\n",
    "如果对本书内容理解上有需要进一步和作者交流的地方，欢迎在公众号\"算法美食屋\"下留言。作者时间和精力有限，会酌情予以回复。\n",
    "\n",
    "也可以在公众号后台回复关键字：**加群**，加入读者交流群和大家讨论。\n",
    "\n",
    "![算法美食屋logo.png](https://tva1.sinaimg.cn/large/e6c9d24egy1h41m2zugguj20k00b9q46.jpg)"
   ]
  }
 ],
 "metadata": {
  "jupytext": {
   "cell_metadata_filter": "-all",
   "main_language": "python"
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
